home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / SOUND / PLAYTRAC00 / !PlayTrack / !RunImage (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1994-02-04  |  56KB  |  2,438 lines

  1.  >$.!PlayTrack.!RunImage
  2.  1992
  3. tellemoff("Fatal error: (type="+
  4. +") "+
  5. $+" Re-run & try again."):
  6.  "Wimp_CloseDown":
  7.  errors in this bit of code cannot be dealt with - quit immediately
  8.  If you try, templates might not be loaded, menus not defined etc.
  9.  q% 800,useful% 700,ind% &200,ind2% &300,menu% 300,pointer% 400
  10.  icontext% 36,iconvalid% 36,ind3% &200,ind4% &300,open% 650
  11.  indtext% 256:indptr%=0
  12.  ind5% &200,channel(8),ind6% &150,ind7% &100,ind8% &200,ind9% &200
  13.  ind10% &100,ind11% &20,code% 700,ind12% &100,ind13% &20,ind14% &20
  14.  samps% 32*31,volume% 4*31,samplen% 6*31,valid% 3,text% 30:$valid%="z4"
  15.  cd$(75),ch%(7):ch%()=
  16. I$text%="No:":$(text%+8)="Name:":$(text%+16)="Vol:":$(text%+24)="Len:"
  17. <edited%=
  18. :playing%=
  19. :speaker=
  20. :buffersize%=0:lenbytes%=0
  21. 8copen%=
  22. :topen%=
  23. :sopen%=
  24. :vopen%=
  25. :type=0:newicn%=
  26. =sicn%=0:nscn%=
  27. :cmos%=42:cmos2%=43:oopen%=
  28. :lap%=
  29. :scr%=
  30. 3dos%=
  31. :afs%=
  32. :vuopen%=
  33. :mute%=
  34. :mak%=
  35. :wopen%=
  36. ?show%=
  37. :cropen%=
  38. :track%=1:com%=
  39. :ap%=
  40. :clock$="48":buff%=0
  41. Gworkspc%=0:cdpos%=-1:cding%=
  42. :cdir$="":cdmax%=-1:donezero%=
  43. :pti%=0
  44. dragvol%=
  45. :pc=1:c=-1
  46. $q%="TASK"
  47.  "Wimp_Initialise",200,!q%,"PlayTrack" 
  48.  ,taskh%
  49.  "Interface_Initialise",,taskh%:
  50.  claim Interface pointers
  51. )lock%=
  52. (2000):
  53.  "Tracker_Lock",lock%
  54.  "Wimp_OpenTemplate",,"<PlayTrack$Dir>.Templates"
  55.  "Wimp_LoadTemplate",,q%,ind%,ind%+&200,-1,"info",0
  56.  "Wimp_CreateWindow",,q% 
  57.  infowind%
  58.  "Wimp_LoadTemplate",,q%,ind2%,ind2%+&300,-1,"saveas",0
  59.  "Wimp_CreateWindow",,q% 
  60.  saveas%
  61.  "Wimp_LoadTemplate",,q%,ind3%,ind3%+&200,-1,"control",0
  62.  "Wimp_CreateWindow",,q% 
  63.  control%
  64.  "Wimp_LoadTemplate",,q%,ind4%,ind4%+&300,-1,"tuneinfo",0
  65.  "Wimp_CreateWindow",,q% 
  66.  tuneinfo%
  67.  "Wimp_LoadTemplate",,q%,ind5%,ind5%+&200,-1,"stereo",0
  68.  "Wimp_CreateWindow",,q% 
  69.  stereo%
  70.  "Wimp_LoadTemplate",,q%,ind6%,ind6%+&150,-1,"buffer",0
  71.  "Wimp_CreateWindow",,q% 
  72.  buffer%
  73.  "Wimp_LoadTemplate",,q%,ind7%,ind7%+&100,-1,"oddformat",0
  74.  "Wimp_CreateWindow",,q% 
  75.  odd%
  76.  "Wimp_LoadTemplate",,q%,ind8%,ind8%+&200,-1,"helptext",0
  77.  "Wimp_CreateWindow",,q% 
  78.  help%
  79.  "Wimp_LoadTemplate",,q%,ind9%,ind9%+&200,-1,"register",0
  80.  "Wimp_CreateWindow",,q% 
  81.  register%
  82.  "Wimp_LoadTemplate",,q%,ind10%,ind10%+&100,-1,"options",0
  83.  "Wimp_CreateWindow",,q% 
  84.  options%
  85.  "Wimp_LoadTemplate",,q%,ind11%,ind11%+&20,-1,"vumeter",0
  86.  "Wimp_CreateWindow",,q% 
  87.  vumeter%
  88.  "Wimp_LoadTemplate",,q%,ind12%,ind12%+&100,-1,"waveform",0
  89.  "Wimp_CreateWindow",,q% 
  90.  waveform%
  91.  "Wimp_LoadTemplate",,q%,ind13%,ind13%+&20,-1,"wavepane",0
  92.  "Wimp_CreateWindow",,q% 
  93.  wavepane%
  94.  "Wimp_LoadTemplate",,q%,ind14%,ind14%+&20,-1,"cro",0
  95.  "Wimp_CreateWindow",,q% 
  96.  cro%
  97.  "Wimp_CloseTemplate"
  98. samps_wind
  99. get_register
  100. load_opts
  101.  scr% 
  102.  "Sound_Configure",,,
  103. clock$
  104. buffer(
  105. buffer$)
  106. assemble:!vu_block%=pointer%
  107.  "Sound_Speaker",0 
  108.  oldspeak%:
  109.  "Sound_Enable",0 
  110.  oldmute%
  111. A7sccb%=start%+&1850:
  112.  Start of SCCB in TrackerModule
  113. BKdragstart%=
  114. swi("DragASprite_Start"):dragstop%=
  115. swi("DragASprite_Stop")
  116.  "OS_Byte",161,28 
  117.  ,,byte%:
  118.  (byte% 
  119.  2)=0 
  120.  dragstart%=-1:dragstop%=-1
  121. D?h%=
  122. ("<PlayTrack$Dir>.Font"):len%=
  123. #h%:fontlen%=len%-1
  124.  font% len%:
  125.  "OS_File",&FF,"<PlayTrack$Dir>.Font",font%
  126. F3iconb%=
  127. iconbar("playtrack0"):
  128.  icon on iconbar
  129. G<                                    
  130.  -1 = Utility (RHS)
  131. H<                                    
  132.  -2 = Service (LHS)
  133. J#quit%=
  134.  Nothing happened yet!
  135.  "Tracker_Stereo",4,,,,lock%:
  136.  I=1 
  137. stereo(I,4):channel(I)=4:
  138.  registered%=
  139.  pirate%=
  140. setup_mess1:
  141. hold_it(help%)
  142.  "Wimp_CreateMenu",,register%,640,900
  143. error("Error: "+
  144. $+" (code "+
  145. +") Quit ? (Buffer="+
  146. ~workspc%+")",3)=1:
  147.  "Interface_CloseDown",,taskh%:
  148.  "Tracker_Stop",,,,,lock%:
  149.  "Sound_Speaker",oldspeak%:
  150.  "Sound_Enable",oldmute%:
  151.  "Tracker_Unlock",lock%:
  152. tidy:
  153.  "Wimp_CloseDown":
  154.  Error handler drops through to wimp_poll loop, AFTER wimp_initialise
  155.  "Wimp_Poll",,q% 
  156.  reason%:
  157.  and poll the wimp.
  158.  "Interface_PreProcessKey",reason%,q%,taskh%
  159.  "Interface_Poll",reason%,,taskh%:
  160.  Ensure pointer up to date
  161.  reason% 
  162.  0     : 
  163.  newicn% 
  164. Y                
  165.                
  166.  type 
  167. [<                 
  168. puticonsprite(win%,icn%,"selon")
  169. \<                 
  170. puticonsprite(win%,icn%,"seloff")
  171.                
  172.              newicn%=
  173.              
  174. `-             
  175.  x%,y%,b%:
  176.  nscn% 
  177.  b%=0 
  178. a                
  179.                
  180.  sicn% 
  181. c;                 
  182.  0 : 
  183. puticonsprite(control%,0,"rev")
  184. d;                 
  185.  4 : 
  186. puticonsprite(control%,4,"fwd")
  187.                
  188.                nscn%=
  189.              
  190. h-             
  191.  b%<>0 
  192.  dragvol% 
  193. volume
  194. i-             
  195.  b%=0 
  196.  dragvol% dragvol%=
  197. jG             pointer%!0=vumeter%:
  198.  "Wimp_GetWindowState",,pointer%
  199. k-             
  200.  (pointer%!32 
  201.  1<<16)<>0 
  202. l>               
  203.  "Wimp_ForceRedraw",vumeter%,0,-280,310,0
  204.              
  205.              
  206.  cropen% 
  207. o:               
  208.  "Wimp_ForceRedraw",cro%,0,-200,150,0
  209.              
  210. q)             pti%+=1:
  211.  pti%>13 pti%=0
  212.              pointer%!0=-2:pointer%!4=iconb%:
  213.  "Wimp_GetIconState",,pointer%:pointer%!8=0:pointer%!12=0:$(pointer%!32)="Splaytrack"+
  214. pti%:
  215.  "Wimp_SetIconState",,pointer%
  216.  1     : 
  217. redraw
  218.  2     : 
  219.  "Wimp_OpenWindow",,q%
  220. u"             
  221.  !q%=waveform% 
  222. vF               !q%=wavepane%:q%!4+=20:q%!8+=20:q%!12-=20:q%!16-=80
  223. wI               !pointer%=wavepane%:
  224.  "Wimp_GetWindowState",,pointer%
  225. x6               q%!20=pointer%!20:q%!24=pointer%!24
  226. y+               
  227.  "Wimp_OpenWindow",,q%
  228.              
  229.  3     : 
  230.  "Wimp_CloseWindow",,q%
  231. |!             
  232.  !q%=control% 
  233.               copen%=
  234. ~$              
  235. tickmenu(open%,0)
  236. !              
  237. shut(control%)
  238.              
  239. "             
  240.  !q%=tuneinfo% 
  241.               topen%=
  242. $              
  243. tickmenu(open%,1)
  244. "              
  245. shut(tuneinfo%)
  246.              
  247.               
  248.  !q%=stereo% 
  249.               sopen%=
  250. $              
  251. tickmenu(open%,2)
  252.                
  253. shut(stereo%)
  254.              
  255. !             
  256.  !q%=samples% 
  257.               vopen%=
  258. $              
  259. tickmenu(open%,3)
  260. !              
  261. shut(samples%)
  262.              
  263.               
  264.  !q%=buffer% 
  265.               bopen%=
  266. $              
  267. tickmenu(open%,4)
  268.                
  269. shut(buffer%)
  270.              
  271. !             
  272.  !q%=options% 
  273.                oopen%=
  274. %               
  275. tickmenu(open%,5)
  276. "               
  277. shut(options%)
  278.              
  279. !             
  280.  !q%=vumeter% 
  281.                vuopen%=
  282. %               
  283. tickmenu(open%,6)
  284. "               
  285. shut(vumeter%)
  286.              
  287. "             
  288.  !q%=waveform% 
  289.                wopen%=
  290. %               
  291. tickmenu(open%,7)
  292. #               
  293. shut(waveform%)
  294. #               
  295. shut(wavepane%)
  296.              
  297.              
  298.  !q%=cro% 
  299.                cropen%=
  300. %               
  301. tickmenu(open%,8)
  302.                
  303. shut(cro%)
  304.              
  305.  4     : 
  306.  "Wimp_SetCaretPosition",-1
  307.  5     : 
  308.  "Wimp_SetCaretPosition",q%!0,-1
  309.  6     : 
  310. checkmouse
  311.  7     : f$=
  312. lastbit(f$):
  313. dragend
  314.  8     : 
  315.  9     : 
  316. process_menu
  317.  17,18 : 
  318. message
  319.  playing% 
  320. . oldc=c:
  321.  "Tracker_ReadPos",,,,,lock% 
  322.  c>0 donezero%=
  323.  donezero% 
  324.  c<oldc 
  325.  cding% 
  326. #     
  327.  rand% 
  328. next_pl 
  329. nextcd
  330. # c1=
  331. geticondata(control%,9))
  332.  c<>c1 
  333. puticondata(control%,9,
  334.  "Tracker_TuneInfo",,,,,lock% 
  335. $ s1=
  336. geticondata(tuneinfo%,7))
  337.  s<>s1 
  338. puticondata(tuneinfo%,7,
  339.  quit%
  340.  "Interface_CloseDown",,taskh%
  341.  "Sound_Speaker",oldspeak%:
  342.  "Sound_Enable",oldmute%
  343.  "Tracker_Stop",,,,,lock%:
  344.  "Tracker_Unlock",lock%
  345.  "Wimp_CloseDown":
  346.  leave gracefully
  347. iconbar(v$)
  348. $$icontext%="":$iconvalid%="S"+v$
  349. q%!0=-1
  350. q%!4=0
  351. q%!8=0
  352. q%!12=68
  353. q%!16=68
  354. +q%!20=%00010111000000000011000100101011
  355. q%!24=icontext%
  356. q%!28=iconvalid%
  357. q%!32=1
  358.  "Wimp_CreateIcon",,q% 
  359.  i%        :
  360.  And draw the icon
  361. message
  362. yr%=q%!8
  363.  (q%!16) 
  364.  0    : quit%=
  365.  Message_Quit ?
  366.  2    : 
  367.  Message_DataSave ?
  368.  3    : 
  369.  Message_DataLoad ?
  370.  5    : 
  371.  Message_DataOpen ?
  372.  8    : 
  373.  Message_PreQuit ?
  374.  &502 : 
  375. sendhelp:
  376.  Message_Help ?
  377. checkmouse
  378. handle=(q%!12)
  379. icon=(q%!16)
  380.  (q%!12) 
  381.  iconbar ?
  382.  (q%!8) 
  383.  4 : 
  384.  registered%=
  385.  pirate%=
  386.  "Wimp_CreateMenu",,register%,640,900
  387.  2 : 
  388.  "Wimp_CreateMenu",,menu%,!q%-64,319
  389.  1 : 
  390.  Adjust ?
  391.  saveas%
  392.  q%!8 
  393.  4 : 
  394.  q%!16 
  395.  1 : 
  396. slabicon:f$=
  397. geticondata(saveas%,0):
  398. quicksave
  399.  3 : f$=
  400. geticondata(saveas%,0):
  401. dragbox(saveas%,2)
  402.  4 : com%=
  403. com%:
  404. toggleopts(com%,saveas%,4)
  405.  6 : ap%=
  406. toggleopts(ap%,saveas%,6)
  407.  control%
  408.  q%!8 
  409.  4 : 
  410.  q%!16 
  411.  0 : 
  412. puticonsprite(control%,0,"rev1"):sicn%=0:nscn%=
  413. L         
  414.  playing%
  415.  "Tracker_ReadPos",,,,,lock% 
  416.  c,,m:c-=1:
  417.  c=-1 c=m
  418.          
  419.  c=0 donezero%=
  420. 6         
  421.  playing% 
  422.  "Tracker_SetPos",c,,,,lock%
  423.  1 : 
  424.  "Tracker_Pause",,,,,lock%
  425. 0         
  426. puticonsprite(control%,1,"pause1")
  427. .         
  428. puticonsprite(control%,2,"stop")
  429. .         
  430. puticonsprite(control%,3,"play")
  431.  2 : 
  432.  dos% 
  433. *           
  434.  "Tracker_Stop",,,,,lock%
  435. 1           
  436. puticonsprite(control%,1,"pause")
  437. 1           
  438. puticonsprite(control%,2,"stop1")
  439. 0           
  440. puticonsprite(control%,3,"play")
  441. +           
  442. puticondata(control%,9,"0")
  443. ,           
  444. puticondata(control%,10,"0")
  445.             
  446. clear:playing%=
  447.     +           cding%=
  448. :cdpos%=-1:cdmax%=-1
  449.          
  450. +           
  451.  "Tracker_Pause",,,,,lock%
  452. -           
  453.  "Tracker_SetPos",0,,,,lock%
  454. 1           
  455. puticonsprite(control%,1,"pause")
  456. 1           
  457. puticonsprite(control%,2,"stop1")
  458. 0           
  459. puticonsprite(control%,3,"play")
  460. +           
  461. puticondata(control%,9,"0")
  462.            donezero%=
  463.          
  464.  3 : 
  465.  "Tracker_Play",,,,,lock%
  466. /         
  467. puticonsprite(control%,1,"pause")
  468. .         
  469. puticonsprite(control%,2,"stop")
  470. /         
  471. puticonsprite(control%,3,"play1")
  472.  4 : 
  473. puticonsprite(control%,4,"fwd1"):sicn%=4:nscn%=
  474. K         
  475.  playing%
  476.  "Tracker_ReadPos",,,,,lock% 
  477.  c,,m:c+=1:
  478.  c>m c=0
  479. 6         
  480.  playing% 
  481.  "Tracker_SetPos",c,,,,lock%
  482.  12: speaker=
  483.  speaker
  484. -         
  485. toggleopts(speaker,control%,12)
  486. B         
  487.  speaker 
  488.  "Sound_Speaker",2 
  489.  "Sound_Speaker",1
  490.  15: mute%=
  491.  mute%
  492. +         
  493. toggleopts(mute%,control%,15)
  494. >         
  495.  mute% 
  496.  "Sound_Enable",1 
  497.  "Sound_Enable",2
  498.  19: 
  499. volume:dragvol%=
  500.  20,21,22,23,24,25,26,27 : 
  501. mutechan(q%!16-20)
  502.  29: speed%=
  503. geticondata(control%,29))
  504. #*         speed%+=1:
  505.  speed%=6 speed%=0
  506. $/         
  507.  "Tracker_Speed",speed%,,,,lock%
  508. %.         
  509. puticondata(control%,29,
  510. speed%)
  511.  1 : 
  512.  q%!16 
  513.  0 : 
  514. puticonsprite(control%,0,"fwd1"):sicn%=0:nscn%=
  515. )L         
  516.  playing% 
  517.  "Tracker_ReadPos",,,,,lock% 
  518.  c,,m:c+=1:
  519.  c>m c=0
  520. *6         
  521.  playing% 
  522.  "Tracker_SetPos",c,,,,lock%
  523.  4 : 
  524. puticonsprite(control%,4,"rev1"):sicn%=4:nscn%=
  525. ,M         
  526.  playing% 
  527.  "Tracker_ReadPos",,,,,lock% 
  528.  c,,m:c-=1:
  529.  c=-1 c=m
  530. -6         
  531.  playing% 
  532.  "Tracker_SetPos",c,,,,lock%
  533.  29: speed%=
  534. geticondata(control%,29))
  535. /+         speed%-=1:
  536.  speed%=-1 speed%=5
  537. 0/         
  538.  "Tracker_Speed",speed%,,,,lock%
  539. 1.         
  540. puticondata(control%,29,
  541. speed%)
  542.  stereo%
  543.  q%!8 
  544.  4 : 
  545.  q%!16 
  546.  0 : channel(1)-=1:
  547.  channel(1)<1 channel(1)=1
  548. 8"         
  549. stereo(1,channel(1))
  550. 9E         
  551. puticonsprite(stereo%,1,"stereo"+
  552. channel(1)):
  553. slabicon
  554.  2 : channel(1)+=1:
  555.  channel(1)>7 channel(1)=7
  556. ;"         
  557. stereo(1,channel(1))
  558. <E         
  559. puticonsprite(stereo%,1,"stereo"+
  560. channel(1)):
  561. slabicon
  562.  3 : channel(2)-=1:
  563.  channel(2)<1 channel(2)=1
  564. >"         
  565. stereo(2,channel(2))
  566. ?E         
  567. puticonsprite(stereo%,4,"stereo"+
  568. channel(2)):
  569. slabicon
  570.  5 : channel(2)+=1:
  571.  channel(2)>7 channel(2)=7
  572. A"         
  573. stereo(2,channel(2))
  574. BE         
  575. puticonsprite(stereo%,4,"stereo"+
  576. channel(2)):
  577. slabicon
  578.  6 : channel(3)-=1:
  579.  channel(3)<1 channel(3)=1
  580. D"         
  581. stereo(3,channel(3))
  582. EE         
  583. puticonsprite(stereo%,7,"stereo"+
  584. channel(3)):
  585. slabicon
  586.  8 : channel(3)+=1:
  587.  channel(3)>7 channel(3)=7
  588. G"         
  589. stereo(3,channel(3))
  590. HE         
  591. puticonsprite(stereo%,7,"stereo"+
  592. channel(3)):
  593. slabicon
  594.  9 : channel(4)-=1:
  595.  channel(4)<1 channel(4)=1
  596. J"         
  597. stereo(4,channel(4))
  598. KF         
  599. puticonsprite(stereo%,10,"stereo"+
  600. channel(4)):
  601. slabicon
  602.  11: channel(4)+=1:
  603.  channel(4)>7 channel(4)=7
  604. M"         
  605. stereo(4,channel(4))
  606. NF         
  607. puticonsprite(stereo%,10,"stereo"+
  608. channel(4)):
  609. slabicon
  610.  20: channel(5)-=1:
  611.  channel(5)<1 channel(5)=1
  612. P"         
  613. stereo(5,channel(5))
  614. QF         
  615. puticonsprite(stereo%,21,"stereo"+
  616. channel(5)):
  617. slabicon
  618.  22: channel(5)+=1:
  619.  channel(5)>7 channel(5)=7
  620. S"         
  621. stereo(5,channel(5))
  622. TF         
  623. puticonsprite(stereo%,21,"stereo"+
  624. channel(5)):
  625. slabicon
  626.  23: channel(6)-=1:
  627.  channel(6)<1 channel(6)=1
  628. V"         
  629. stereo(6,channel(6))
  630. WF         
  631. puticonsprite(stereo%,24,"stereo"+
  632. channel(6)):
  633. slabicon
  634.  25: channel(6)+=1:
  635.  channel(6)>7 channel(6)=7
  636. Y"         
  637. stereo(6,channel(6))
  638. ZF         
  639. puticonsprite(stereo%,24,"stereo"+
  640. channel(6)):
  641. slabicon
  642.  26: channel(7)-=1:
  643.  channel(7)<1 channel(7)=1
  644. \"         
  645. stereo(7,channel(7))
  646. ]F         
  647. puticonsprite(stereo%,27,"stereo"+
  648. channel(7)):
  649. slabicon
  650.  28: channel(7)+=1:
  651.  channel(7)>7 channel(7)=7
  652. _"         
  653. stereo(7,channel(7))
  654. `F         
  655. puticonsprite(stereo%,27,"stereo"+
  656. channel(7)):
  657. slabicon
  658.  29: channel(8)-=1:
  659.  channel(8)<1 channel(8)=1
  660. b"         
  661. stereo(8,channel(8))
  662. cF         
  663. puticonsprite(stereo%,30,"stereo"+
  664. channel(8)):
  665. slabicon
  666.  31: channel(8)+=1:
  667.  channel(8)>7 channel(8)=7
  668. e"         
  669. stereo(8,channel(8))
  670. fF         
  671. puticonsprite(stereo%,30,"stereo"+
  672. channel(8)):
  673. slabicon
  674.  buffer%
  675.  q%!8 
  676.  4 : 
  677.  q%!16 
  678.  5 : 
  679. slabicon:
  680. buffer(
  681. geticondata(buffer%,3)))
  682.  register%
  683.  q%!8 
  684.  4 : 
  685.  q%!16 
  686.  9 : 
  687. slabicon:
  688. register_copy
  689.  options%
  690.  q%!8 
  691.  4 : 
  692.  q%!16 
  693.  2 : lap%=
  694. lap%:
  695. toggleopts(lap%,options%,2)
  696.  4 : scr%=
  697. scr%:
  698. toggleopts(scr%,options%,4)
  699.  6 : dos%=
  700. dos%:
  701. toggleopts(dos%,options%,6)
  702.  8 : afs%=
  703. afs%:
  704. toggleopts(afs%,options%,8)
  705.  11: mak%=
  706. mak%:
  707. toggleopts(mak%,options%,11)
  708.  10: 
  709. slabicon:
  710. save_opts
  711.  waveform%
  712.  q%!8 
  713.  4 : 
  714.  q%!16 
  715.  2 : 
  716. slabicon:
  717. playnote
  718.  cro%:
  719.  q%!8 
  720.  4 : track%+=1:
  721.  track%=9 track%=1
  722. >         pointer%!0=cro%:
  723.  "Wimp_GetWindowInfo",,pointer%
  724. #         $(pointer%!76)=
  725. track%
  726. /         
  727.  "Wimp_GetWindowState",,pointer%
  728. ,         
  729.  "Wimp_CloseWindow",,pointer%
  730. +         
  731.  "Wimp_OpenWindow",,pointer%
  732.  1 : track%-=1:
  733.  track%=0 track%=8
  734. >         pointer%!0=cro%:
  735.  "Wimp_GetWindowInfo",,pointer%
  736. #         $(pointer%!76)=
  737. track%
  738. /         
  739.  "Wimp_GetWindowState",,pointer%
  740. ,         
  741.  "Wimp_CloseWindow",,pointer%
  742. +         
  743.  "Wimp_OpenWindow",,pointer%
  744.  Setup menus and menu block
  745. P%=menu%
  746. flags=&7000021
  747. menu_header("PlayTrack",9)
  748. menu_item(&00,infowind%,flags,"Info")
  749.  registered% 
  750. menu_item(&00,open%,flags,"Open") 
  751. menu_item(&00,open%,&2000021,"Open")
  752.  registered% 
  753. menu_item(&00,saveas%,flags,"Save  F3") 
  754. menu_item(&00,saveas%,&2000021,"Save  F3")
  755. menu_item(&00,-1,flags,"Stop  F6")
  756. menu_item(&80,-1,flags,"Quit")
  757. P%=open%
  758. menu_header("Open",14)
  759. menu_item(&00,-1,flags,"Control  
  760. menu_item(&00,-1,flags,"Info     
  761. menu_item(&00,-1,flags,"Stereo   
  762. menu_item(&00,-1,flags,"Samples  
  763. menu_item(&00,-1,flags,"Buffer   
  764. menu_item(&00,-1,flags,"Options  
  765. menu_item(&00,-1,flags,"Vu-Meter 
  766. menu_item(&00,-1,flags,"Waveform 
  767. menu_item(&00,-1,flags,"CRO      
  768. menu_item(&80,-1,flags,"Monitor  
  769. F10")
  770.  registered%=
  771.  I%=0 
  772. greymenu(open%,I%):
  773. disable(saveas%,1):
  774. disable(saveas%,3)
  775. menu_header(T$,w)
  776. $P%=T$
  777. P%!12=&70207
  778. P%!16=w*16
  779. P%!20=40
  780. P%!24=0
  781. P%+=28
  782. menu_item(A%,B%,C%,T$)
  783. P%!0=A%
  784. P%!4=B%
  785. P%!8=C%
  786. (T$)<13 
  787.   $(P%+12)=T$
  788.   $(indtext%+indptr%)=T$
  789.   P%!12=indtext%+indptr%
  790.   P%!16=-1
  791.   P%!20=
  792. (T$)+1
  793.   P%!8=P%!8 
  794.  1<<8
  795.   indptr%+=
  796. (T$)+1
  797. P%+=24
  798. error(e$,b%):!q%=0:$(q%+4)=e$+
  799.  "Wimp_ReportError",q%,b%,"PlayTrack" 
  800.  f$,T%
  801. 250," "):f$="":T%=q%+44
  802.  ?T%<>0:f$+=
  803. ?T%:T%+=1:
  804.  q%!40 
  805.  &CB6,&001,&CC5,&701 : 
  806.  q%!20=-2 cding%=
  807. :cdpos%=-1:cdmax%=-1:
  808. tracker_loadit(f$)
  809.  &2000               : 
  810.  q%!20=-2 
  811. lastbit(f$)="!Music" 
  812. loadcd(f$)
  813.  &FFF                : 
  814.  q%!20=-2 
  815. loadpl(f$)
  816.                 : 
  817. hold_it(odd%)
  818. 2q%!12=q%!8:q%!16=4:
  819.  "Wimp_SendMessage",17,q%
  820.  f$,T%
  821. 250," "):f$="":f$=
  822. rtoz(q%+44)
  823.  q%!40 
  824.  &CB6,&001,&CC5,&701 : cding%=
  825. :cdpos%=-1:cdmax%=-1:
  826. tracker_loadit(f$)
  827.                 : 
  828. 2q%!12=q%!8:q%!16=4:
  829.  "Wimp_SendMessage",17,q%
  830. redraw
  831.  "Wimp_RedrawWindow",,q% 
  832.  flag
  833.  x%=q%!4-q%!20:y%=q%!16-q%!24
  834.  flag<>0
  835.  !q%=vumeter% 
  836.  playing% 
  837.  "Tracker_SoundInfo",pointer%,,,,lock%
  838.   !vu_x%=x%:!vu_y%=y%-280
  839.  code%
  840.  !q%=wavepane% 
  841.  show% 
  842. geticondata(waveform%,1)<>"" 
  843.  playing% 
  844.  "Hourglass_On"
  845. I  samp%=
  846. geticondata(waveform%,1)):
  847.  samp%=0 
  848.  "Hourglass_Smash":
  849.  "Tracker_ReadSampleTable",samp%,,,,lock% 
  850.  ,,len1%,len%,rpt%,rptlen%,addr%
  851.  "Wimp_SetColour",7
  852.  len1%>0 
  853.  addr%>0 
  854. A    scale%=len%/len1%:rpt%=rpt%/scale%:rptlen%=rptlen%/scale%
  855. )    sx=0:sy%=0:dist=2112/len1%:mid%=0
  856.  x%,y%-256
  857.  I%=0 
  858.  len1%
  859. '    sx+=dist:sy%=addr%?I%:mid%+=sy%
  860.  x%+sx,(y%-256)+sy%
  861.     mid%=mid%/len1%
  862.  "Wimp_SetColour",11
  863. 2    
  864.  x%,(y%-256)+mid%:
  865.  x%+2112,(y%-256)+mid%
  866.  "Wimp_SetColour",10
  867. 1    
  868.  x%+rpt%*dist,(y%-256):
  869.  x%+rpt%*dist,y%
  870.  "Wimp_SetColour",13
  871. E    
  872.  x%+(rpt%+rptlen%)*dist,(y%-256):
  873.  x%+(rpt%+rptlen%)*dist,y%
  874.  "Hourglass_Off"
  875.  !q%=cro% 
  876.  "Wimp_SetColour",14
  877.  I%=0 
  878.  150 
  879.  x%+I%,(y%-200):
  880.  x%+I%,y%:
  881.  I%=0 
  882.  200 
  883.  x%,(y%-I%):
  884.  x%+150,(y%-I%):
  885.  playing% 
  886.  "Wimp_SetColour",0
  887. V    
  888.  "Tracker_SoundInfo",pointer%,,,,lock%:boff%=(pointer%!((track%-1)*32)>>>16)
  889. -    samp%=(pointer%!(((track%-1)*32)+16))
  890.  samp%>0 
  891. e      
  892.  "Tracker_ReadSampleTable",samp%,,,,lock% 
  893.  ,,,len%,,,addr%:
  894.  boff%>len%-15 boff%=len%-15
  895. &      
  896.  boff%<len%+15 bof%=len%+15
  897.       
  898.  x%,(y%-200)+addr%?(boff%-1):sx%=0:sy=0:
  899.  I%=boff%-15 
  900.  boff%+15:sy=(addr%?I%)/1.28:
  901.  x%+sx%,(y%-200)+sy:sx%+=(150/30):
  902.         
  903. )      
  904.  x%,(y%-100):
  905.  x%+150,(y%-100)
  906.         
  907.  !q%<>vumeter% 
  908.  "Interface_Render3dWindow",,q%
  909.  "Wimp_GetRectangle",,q% 
  910.  flag
  911. assemble:
  912.  redraw code in assembler for speed:
  913.  pass%=8 
  914. P%=code%:L%=code%+700
  915. [OPT pass%
  916. LDR R0,vu_block%
  917. $!LDR R1,[R0,#24]:STR R1,chan1%
  918. %$LDR R1,[R0,#32+24]:STR R1,chan2%
  919. &$LDR R1,[R0,#64+24]:STR R1,chan3%
  920. '$LDR R1,[R0,#96+24]:STR R1,chan4%
  921. (%LDR R1,[R0,#128+24]:STR R1,chan5%
  922. )%LDR R1,[R0,#160+24]:STR R1,chan6%
  923. *%LDR R1,[R0,#192+24]:STR R1,chan7%
  924. +%LDR R1,[R0,#224+24]:STR R1,chan8%
  925. MOV R0,#11
  926. SWI "Wimp_SetColour"
  927. LDR R2,vu_y%
  928. LDR R1,vu_x%:MOV R0,#4
  929. SWI "OS_Plot"
  930. 1:MOV R1,#30:LDR R3,chan1%:MOV R2,R3,LSL #3:SUB R2,R2,R3
  931. MOV R0,#97:SWI "OS_Plot"
  932. LDR R2,vu_y%
  933. 4(LDR R1,vu_x%:ADD R1,R1,#40:MOV R0,#4
  934. SWI "OS_Plot"
  935. 6:MOV R1,#30:LDR R3,chan2%:MOV R2,R3,LSL #3:SUB R2,R2,R3
  936. MOV R0,#97:SWI "OS_Plot"
  937. LDR R2,vu_y%
  938. 9(LDR R1,vu_x%:ADD R1,R1,#80:MOV R0,#4
  939. SWI "OS_Plot"
  940. ;:MOV R1,#30:LDR R3,chan3%:MOV R2,R3,LSL #3:SUB R2,R2,R3
  941. MOV R0,#97:SWI "OS_Plot"
  942. LDR R2,vu_y%
  943. >)LDR R1,vu_x%:ADD R1,R1,#120:MOV R0,#4
  944. SWI "OS_Plot"
  945. @:MOV R1,#30:LDR R3,chan4%:MOV R2,R3,LSL #3:SUB R2,R2,R3
  946. MOV R0,#97:SWI "OS_Plot"
  947. LDR R2,vu_y%
  948. C)LDR R1,vu_x%:ADD R1,R1,#160:MOV R0,#4
  949. SWI "OS_Plot"
  950. E:MOV R1,#30:LDR R3,chan5%:MOV R2,R3,LSL #3:SUB R2,R2,R3
  951. MOV R0,#97:SWI "OS_Plot"
  952. LDR R2,vu_y%
  953. H)LDR R1,vu_x%:ADD R1,R1,#200:MOV R0,#4
  954. SWI "OS_Plot"
  955. J:MOV R1,#30:LDR R3,chan6%:MOV R2,R3,LSL #3:SUB R2,R2,R3
  956. MOV R0,#97:SWI "OS_Plot"
  957. LDR R2,vu_y%
  958. M)LDR R1,vu_x%:ADD R1,R1,#240:MOV R0,#4
  959. SWI "OS_Plot"
  960. O:MOV R1,#30:LDR R3,chan7%:MOV R2,R3,LSL #3:SUB R2,R2,R3
  961. MOV R0,#97:SWI "OS_Plot"
  962. LDR R2,vu_y%
  963. R)LDR R1,vu_x%:ADD R1,R1,#280:MOV R0,#4
  964. SWI "OS_Plot"
  965. T:MOV R1,#30:LDR R3,chan8%:MOV R2,R3,LSL #3:SUB R2,R2,R3
  966. MOV R0,#97:SWI "OS_Plot"
  967. MOV PC,R14
  968. WB.vu_block% EQUD 0:.chan1% EQUD 0:.chan2% EQUD 0:.chan3% EQUD 0
  969. X?.chan4% EQUD 0:.chan5% EQUD 0:.chan6% EQUD 0:.chan7% EQUD 0
  970. Y..chan8% EQUD 0:.vu_x% EQUD 0:.vu_y% EQUD 0
  971.  pass%
  972. process_menu
  973.  "Wimp_GetPointerInfo",,pointer%:j%=(pointer%!8=1)
  974.  handle 
  975.  q%!0 
  976.  1 : 
  977.  q%!4 
  978. d5          
  979.  0 : copen%=
  980. copen%:
  981. tickmenu(open%,0)
  982. e@                   
  983.  copen% 
  984. openup(control%,0,1024,625,360)
  985. f1                   
  986.  copen% 
  987. shut(control%)
  988. g5          
  989.  1 : topen%=
  990. topen%:
  991. tickmenu(open%,1)
  992. hB                   
  993.  topen% 
  994. openup(tuneinfo%,580,530,700,430)
  995. i2                   
  996.  topen% 
  997. shut(tuneinfo%)
  998. j5          
  999.  2 : sopen%=
  1000. sopen%:
  1001. tickmenu(open%,2)
  1002. k@                   
  1003.  sopen% 
  1004. window_centre(stereo%,1110,250)
  1005. l0                   
  1006.  sopen% 
  1007. shut(stereo%)
  1008. m5          
  1009.  3 : vopen%=
  1010. vopen%:
  1011. tickmenu(open%,3)
  1012. nB                   
  1013.  vopen% 
  1014. openback(samples%,0,1000,700,850)
  1015. o1                   
  1016.  vopen% 
  1017. shut(samples%)
  1018. p5          
  1019.  4 : bopen%=
  1020. bopen%:
  1021. tickmenu(open%,4)
  1022. q?                   
  1023.  bopen% 
  1024. window_centre(buffer%,700,475)
  1025. r0                   
  1026.  bopen% 
  1027. shut(buffer%)
  1028. s5          
  1029.  5 : oopen%=
  1030. oopen%:
  1031. tickmenu(open%,5)
  1032. t@                   
  1033.  oopen% 
  1034. window_centre(options%,768,367)
  1035. u1                   
  1036.  oopen% 
  1037. shut(options%)
  1038. v7          
  1039.  6 : vuopen%=
  1040. vuopen%:
  1041. tickmenu(open%,6)
  1042. wB                   
  1043.  vuopen% 
  1044. openup(vumeter%,970,900,310,280)
  1045. x2                   
  1046.  vuopen% 
  1047. shut(vumeter%)
  1048. y5          
  1049.  7 : wopen%=
  1050. wopen%:
  1051. tickmenu(open%,7)
  1052. zR                   
  1053.  wopen% 
  1054. openlinked(waveform%,wavepane%,1280,390,2112,256)
  1055. {C                   
  1056.  wopen% 
  1057. shut(waveform%):
  1058. shut(wavepane%)
  1059. |8          
  1060.  8 : cropen%=
  1061.  cropen%:
  1062. tickmenu(open%,8)
  1063. }>                   
  1064.  cropen% 
  1065. openup(cro%,700,500,150,200)
  1066. ~.                   
  1067.  cropen% 
  1068. shut(cro%)
  1069.           
  1070.  9 : 
  1071. monitor
  1072.          
  1073.  3 : 
  1074.  dos% 
  1075. *           
  1076.  "Tracker_Stop",,,,,lock%
  1077. 1           
  1078. puticonsprite(control%,1,"pause")
  1079. 1           
  1080. puticonsprite(control%,2,"stop1")
  1081. 0           
  1082. puticonsprite(control%,3,"play")
  1083. +           
  1084. puticondata(control%,9,"0")
  1085. ,           
  1086. puticondata(control%,10,"0")
  1087.             
  1088. clear:playing%=
  1089. +           cding%=
  1090. :cdpos%=-1:cdmax%=-1
  1091.          
  1092. +           
  1093.  "Tracker_Pause",,,,,lock%
  1094. -           
  1095.  "Tracker_SetPos",0,,,,lock%
  1096. 1           
  1097. puticonsprite(control%,1,"pause")
  1098. 1           
  1099. puticonsprite(control%,2,"stop1")
  1100. 0           
  1101. puticonsprite(control%,3,"play")
  1102. +           
  1103. puticondata(control%,9,"0")
  1104.            donezero%=
  1105.          
  1106.  4 : 
  1107.  edited%=
  1108. D          
  1109. ok("File(s) edited but not saved. Really quit ?") 
  1110.            quit%=
  1111.           
  1112.            quit%=
  1113.           
  1114.          
  1115.           
  1116.  edited%=
  1117.            quit%=
  1118.           
  1119.          
  1120.  "Wimp_CreateMenu",,menu%,pointer%!0,pointer%!4
  1121. openup(handle,x,y,w,h)
  1122. pointer%!0=handle
  1123. pointer%!4=x:pointer%!8=y-h
  1124. !pointer%!12=x+w:pointer%!16=y
  1125. pointer%!20=0:pointer%!24=0
  1126. pointer%!28=-1
  1127.  "Wimp_OpenWindow",,pointer%
  1128. openback(handle,x,y,w,h)
  1129. pointer%!0=handle
  1130. pointer%!4=x:pointer%!8=y-h
  1131. !pointer%!12=x+w:pointer%!16=y
  1132. pointer%!20=0:pointer%!24=0
  1133. pointer%!28=-2
  1134.  "Wimp_OpenWindow",,pointer%
  1135. slabicon
  1136.  "Interface_SlabButton",,q%:
  1137.  Slab in...
  1138. q%!8=0
  1139.  "Interface_SlabButton",,q%:
  1140.  ...and out
  1141. shut(h%)
  1142. 1pointer%!0=h%:
  1143.  "Wimp_CloseWindow",,pointer%
  1144. sendhelp
  1145. %q%!12=q%!8:q%!16=&503:help%=q%+20
  1146. :help%=
  1147. help(q%!32,q%!36,q%!20,q%!24,help%):
  1148.  help%=0 
  1149. +?help%=0:
  1150.  No, so send application help
  1151. *!q%=(help%+4-q%)
  1152.  Setup help block
  1153.  "Wimp_SendMessage",17,q%,q%!4:
  1154.  and send it
  1155. help(window%,icon%,x%,y%,to%)
  1156. $to%=""
  1157.  window% 
  1158.  -2 : 
  1159.  iconbar ?
  1160.  icon% 
  1161.  icon% : 
  1162.  my icon ?
  1163. P  $to%="This is the PlayTrack icon.|MDrag Tracker tunes to it to play them."
  1164.  infowind% : 
  1165.  info window ?
  1166.  icon% 
  1167.  -1,0,1,2,3,4,5,6,7,8 : 
  1168.  not over 'Click here...' icon ?
  1169. L  $to%="This is the Info window.|MIt provides information on PlayTrack."
  1170.  "Interface_SendHelp",,q%:=0:
  1171.  Send Interface help
  1172.  saveas% : 
  1173.  'Save as:' window ?
  1174.  icon% 
  1175.  -1 : 
  1176.  over work area ?
  1177. C  $to%="This is the 'Save' window.|MIt is used to save a file."
  1178.  "Interface_SendHelp",,q%:=0:
  1179.  Send Interface help
  1180. =to%+
  1181. ($to%)
  1182. geticondata(window%,icon%)
  1183. pointer%!0=window%
  1184. pointer%!4=icon%
  1185.  "Wimp_GetIconState",,pointer%
  1186. =$(pointer%!28)
  1187. puticondata(window%,icon%,t$)
  1188. 'pointer%!0=window%:pointer%!4=icon%
  1189.  "Wimp_GetIconState",,pointer%
  1190. $(pointer%!28)=t$
  1191. pointer%!12=0:pointer%!8=0
  1192.  "Wimp_SetIconState",,pointer%
  1193. puticonsprite(window%,icon%,t$)
  1194. 'pointer%!0=window%:pointer%!4=icon%
  1195.  "Wimp_GetIconState",,pointer%
  1196.  "Wimp_DeleteIcon",,pointer%
  1197. (pointer%!4=window%:$(pointer%+28)=t$
  1198. .pointer%+=4:
  1199.  "Wimp_CreateIcon",,pointer%
  1200.  "Wimp_ForceRedraw",pointer%!0,pointer%!4,pointer%!8,pointer%!12,pointer%!16
  1201. pointer%-=4
  1202. tellemoff(e$)
  1203. er%=pointer%
  1204. !er%=0
  1205. $(er%+4)=e$+
  1206.  "Wimp_ReportError",er%,1,"PlayTrack"
  1207. rtoz(T%):
  1208.  ?T%<>0:q$+=
  1209. ?T%:T%+=1:
  1210.  edited% 
  1211. ok("File(s) edited but not saved. Really quit ?"):
  1212. no_quit
  1213. ok(e$)
  1214. er%=pointer%
  1215. !er%=0
  1216. $(er%+4)=e$+
  1217.  "Wimp_ReportError",er%,&17,"Message from !PlayTrack" 
  1218. =(b%=1)
  1219. no_quit
  1220. 9q%!12=q%!8:q%!16=8:
  1221.  "Wimp_SendMessage",17,q%,q%!4:
  1222. dragend
  1223.  dragstop%<>-1 
  1224.  dragstop%
  1225. d%=pointer%
  1226.  "Wimp_GetPointerInfo",,d%
  1227. +d%!32=d%!4                   :tt%=d%!32
  1228. +d%!28=!d%                    :te%=d%!28
  1229. +d%!24=d%!16                  :tf%=d%!24
  1230. +d%!20=d%!12                  :tw%=d%!20
  1231. %d%!16=1     :d%!12=0     :d%!36=0
  1232. )d%!40=0     :!d%=64      :$(d%+44)=f$
  1233.  "Wimp_SendMessage",17,d%,d%!20,d%!24
  1234. mr%=d%!8
  1235. lastbit(s$)
  1236. s$,":")>0
  1237. s$,":")+1)
  1238. s$,".")>0
  1239. s$,".")+1)
  1240. puticondata(saveas%,0,
  1241. rtoz(q%+44))
  1242. rtoz(q%+44)
  1243. sd(&FFA)
  1244. dragbox(w%,i%)
  1245. d%=pointer%
  1246. !d%=w%
  1247.  "Wimp_GetWindowState",,d%
  1248. 0"ys%=d%!16-d%!8:x%=d%!4:y%=d%!8
  1249. d%!4=i%
  1250.  "Wimp_GetIconState",,d%
  1251. lastbit(f$)
  1252. d%!8+=x%
  1253. d%!12+=y%+ys%
  1254. d%!16+=x%
  1255. d%!20+=y%+ys%
  1256. d%!24=0
  1257. d%!28=0
  1258.  "OS_ReadModeVariable",
  1259.  ,,h%:h%=
  1260. extracth(h%)
  1261.  "OS_ReadModeVariable",
  1262.  ,,v%:v%=
  1263. extractv(v%)
  1264. d%!32=(h%*2)
  1265. d%!36=(v%*4)
  1266. >    !d%=0
  1267. d%!4=5
  1268.  dragstart%=-1 
  1269.  "Wimp_DragBox",,d%
  1270.  dragstart%,%11000101,1,"file_ffa",d%+8,d%+24
  1271. quicksave
  1272. f$,":")<1 
  1273. f$,".")<1 
  1274. tellemoff("To save, drag icon to a directory viewer")
  1275. sd(&FFA)
  1276. sd(t%)
  1277. save_rm(f$)
  1278. d%=pointer%
  1279. !d%=64
  1280. d%!20=tw%
  1281. d%!24=tf%
  1282. d%!28=te%
  1283. d%!32=tt%
  1284. d%!12=yr%
  1285. d%!16=3
  1286. d%!36=0
  1287. d%!40=t%
  1288. $(d%+44)=f$
  1289.  "Wimp_SendMessage",17,d%,d%!20
  1290.  "OS_File",18,f$,t%
  1291.  "Wimp_CreateMenu",,-1
  1292. extracth(a%)
  1293.  0 : =1280
  1294.  1 : =640
  1295.  2 : =320
  1296.  3 : =160
  1297. extractv(a%)
  1298.  1 : =512
  1299.  2 : =256
  1300. toggleopts(flag,w%,i%):win%=w%:icn%=i%
  1301. puticonsprite(w%,i%,"selclick")
  1302.  flag 
  1303.   : newicn%=
  1304. :type=flag
  1305.  : newicn%=
  1306. :type=flag
  1307. toggleradio(flag,w%,i%,i2%)
  1308.  flag 
  1309. puticonsprite(w%,i%,"radon")
  1310. z1              
  1311. puticonsprite(w%,i2%,"radoff")
  1312. puticonsprite(w%,i%,"radoff")
  1313. |0              
  1314. puticonsprite(w%,i2%,"radon")
  1315. hackflags(w%,i%,eor%,or%)
  1316. pointer%!0=w%:pointer%!4=i%
  1317. #pointer%!8=eor%:pointer%!12=or%
  1318.  "Wimp_SetIconState",,pointer%
  1319. enable(w%,i%)
  1320. hackflags(w%,i%,0,&400000)
  1321. disable(w%,i%)
  1322. hackflags(w%,i%,&400000,&400000)
  1323. select(w%,i%)
  1324. hackflags(w%,i%,&200000,&200000)
  1325. deselect(w%,i%)
  1326. hackflags(w%,i%,0,&200000)
  1327. toedit(file$)
  1328. !pointer%=(48+
  1329. file$)
  1330. pointer%!12=0
  1331. pointer%!16=5
  1332. pointer%!36=-2
  1333. pointer%!40=&FFF
  1334. $(pointer%+44)=file$+
  1335.  "Wimp_SendMessage",18,pointer%,0
  1336. tocursor(text$)
  1337.  key%=1 
  1338. (text$)
  1339.  "Wimp_ProcessKey",
  1340. text$,key%,1))
  1341.  "Wimp_Poll",,q% 
  1342.  reason%
  1343.  "Interface_PreProcessKey",reason%,q%,taskh%
  1344.  "Interface_Poll",reason%,,taskh%
  1345.  reason% 
  1346.  1 : 
  1347. redraw
  1348.  2 : 
  1349.  "Wimp_OpenWindow",,q%
  1350.  3 : 
  1351.  "Wimp_CloseWindow",,q%
  1352.  6 : 
  1353. checkmouse
  1354.  7 : f$=
  1355. lastbit(f$):
  1356. dragend
  1357.  9 : 
  1358. process_menu
  1359.  17,18 : 
  1360. message
  1361. tickmenu(b%,n%)
  1362. %b%!(28+24*n%)=b%!(28+24*n%) 
  1363. greymenu(b%,n%)
  1364. 1b%!((28+24*n%)+8)=b%!((28+24*n%)+8) 
  1365.  &400000
  1366. window_centre(handle%,w%,h%)
  1367. x%=((1280-w%)/2)
  1368. y%=(((1024-h%)/2)+h%)
  1369. openup(handle%,x%,y%,w%,h%)
  1370. force_redraw
  1371.  "Wimp_ForceRedraw",fontselect%,0,0-400,700,0
  1372. tracker_loadit(f$):tune$=f$
  1373.  "Tracker_Stop",,,,,lock%:
  1374.  Release so next call won't corrupt
  1375.  workspc%>0 
  1376.  "OS_Heap",3,buff%,workspc%
  1377. (f$):len%=
  1378.  "XOS_Heap",2,buff%,,len% 
  1379.  ,,workspc%;flags%
  1380.  (flags% 
  1381.  1)=1 
  1382. tellemoff("Buffer size is inadequate: Please extend"):
  1383.  "OS_File",&FF,f$,workspc%
  1384.  "Tracker_MemoryLoad",workspc%,len%,,,lock%
  1385.  lap% 
  1386.  "Tracker_Play",,,,,lock%
  1387. puticonsprite(control%,0,"rev")
  1388. puticonsprite(control%,1,"pause")
  1389.  lap% 
  1390. puticonsprite(control%,2,"stop") 
  1391. puticonsprite(control%,2,"stop1")
  1392.  lap% 
  1393. puticonsprite(control%,3,"play1") 
  1394. puticonsprite(control%,3,"play")
  1395. puticonsprite(control%,4,"fwd")
  1396.  "Tracker_ReadPos",,,,,lock% 
  1397.  current,,max
  1398. puticondata(control%,10,
  1399. puticondata(tuneinfo%,1,f$)
  1400. (f$):len%=
  1401. puticondata(tuneinfo%,3,
  1402. len%+" bytes -- "+
  1403. int((len%/1024)+0.4))+"K"):lenbytes%=len%
  1404.  "Tracker_TuneInfo",,,,,lock% 
  1405.  len1%,voices%,speed%,name$,a%
  1406.  a%>0 author$=
  1407. rtoz(a%) 
  1408.  author$=""
  1409. name$=
  1410. strip(name$)
  1411. puticondata(tuneinfo%,5,
  1412. voices%)
  1413. puticondata(tuneinfo%,7,
  1414. speed%)
  1415. puticondata(tuneinfo%,9,
  1416. len1%)
  1417. puticondata(tuneinfo%,11,name$)
  1418. puticondata(tuneinfo%,13,author$)
  1419. puticondata(tuneinfo%,15,
  1420. fmat(f$))
  1421. puticondata(control%,14,name$)
  1422.  "OS_File",5,f$ 
  1423.  ,,load%:type%=(load%>>>8)
  1424. &FFF:
  1425.  type% 
  1426.  &001 : 
  1427. puticondata(tuneinfo%,17,"STracker")
  1428.  &CB6 : 
  1429. puticondata(tuneinfo%,17,"STModule")
  1430.  &CC5 : 
  1431. puticondata(tuneinfo%,17,"TeqMusic")
  1432.  &701 : 
  1433. puticondata(tuneinfo%,17,"ProTrack")
  1434.  afs% 
  1435.  "OS_File",18,f$,&CB6
  1436. samples_draw
  1437. redo_buff(lenbytes%)
  1438. playing%=
  1439. redo_buff(len%)
  1440.  buffersize%>0 
  1441. puticondata(buffer%,10,
  1442. len%+" bytes -- "+
  1443. int(len%/1024))+"K")
  1444.  "OS_Heap",1,buff% 
  1445.  ,,,free%
  1446. puticondata(buffer%,11,
  1447. (free%)+" bytes -- "+
  1448. int(free%/1024))+"K")
  1449. puticondata(buffer%,10,"No buffer defined")
  1450. puticondata(buffer%,11,"No buffer defined")
  1451. clear
  1452. puticondata(tuneinfo%,1,"No Tune Loaded")
  1453. puticondata(tuneinfo%,3,"No Tune Loaded")
  1454. puticondata(tuneinfo%,5,"0")
  1455. puticondata(tuneinfo%,7,"0")
  1456. puticondata(tuneinfo%,9,"0")
  1457. puticondata(tuneinfo%,11,"No Tune Loaded")
  1458. puticondata(tuneinfo%,13,"No Tune Loaded")
  1459. puticondata(tuneinfo%,15,"0")
  1460. puticondata(tuneinfo%,17,"No Tune Loaded")
  1461. puticondata(control%,14,"")
  1462. strip(text$)
  1463. text$,1))<33:text$=
  1464. text$,(
  1465. text$)-1):
  1466. text$,1))<33:text$=
  1467. text$,(
  1468. text$)-1):
  1469. =text$
  1470. fmat(f$)
  1471.  mak% 
  1472. mandk(f$)
  1473. xbyte(f$)
  1474. xbyte(f$)
  1475. #h%=471
  1476.  a=&78 ="15" 
  1477.  ="31"
  1478. mandk(f$)
  1479. #h%=1080
  1480. "q$="":
  1481.  I%=1 
  1482.  4:q$+=
  1483. #h%):
  1484.  q$="M.K." 
  1485.  q$="FLT4" 
  1486.  q$="FLT8" ="31" 
  1487.  ="15"
  1488.  Check for Startrekker as well as ProTracker ID
  1489. stereo(ch,pos)
  1490.  "Sound_Stereo",ch,
  1491. pos(pos)
  1492. pos(pos)
  1493.  pos 
  1494.  1 : =-127
  1495.  2 : =-79
  1496.  3 : =-47
  1497.  4 : =0
  1498.  5 : =47
  1499.  6 : =79
  1500.  7 : =127
  1501. create(ww,wh,tf,tb,sc,T$,wf,wb,flags)
  1502. /$pointer%!24=-1:pointer%!28=flags
  1503. 0!pointer%?32=tf:pointer%?33=tb
  1504. 1!pointer%?34=wf:pointer%?35=wb
  1505. pointer%?36=3:pointer%?37=1
  1506. 3 pointer%?38=sc:pointer%?39=0
  1507. 4 pointer%!40=0:pointer%!44=wh
  1508. 5 pointer%!48=ww:pointer%!52=0
  1509. 6!pointer%!56=&3D:pointer%!60=0
  1510. pointer%!64=0:pointer%!68=0
  1511. $(pointer%+72)=T$
  1512. pointer%!84=0
  1513.  "Wimp_CreateWindow",,pointer% 
  1514. create_icon(handle,addr,minx,maxx,miny,ht,t$,flags,len)
  1515. >%pointer%!0=handle:pointer%!4=minx
  1516. ?$pointer%!8=miny:pointer%!12=maxx
  1517. @)pointer%!16=miny+ht:pointer%!20=flags
  1518.  addr=0 
  1519. $(pointer%+24)=t$
  1520. pointer%!24=addr
  1521.  t$="
  1522. " pointer%!28=valid% 
  1523.  pointer%!28=-1
  1524. pointer%!32=len
  1525.  "Wimp_CreateIcon",,pointer%
  1526. samps_wind
  1527. start%=samps%
  1528. volstart%=volume%
  1529. sampstart%=samplen%
  1530. O9samples%=
  1531. create(700,-1200,7,2,12,"Samples",7,1,%111)
  1532. miny=-60
  1533. create_icon(samples%,text%,10,80,miny,52,"
  1534. ",&17000121,0)
  1535. create_icon(samples%,text%+8,90,200,miny,52,"
  1536. ",&17000121,0)
  1537. create_icon(samples%,text%+16,500,590,miny,52,"
  1538. ",&17000121,0)
  1539. create_icon(samples%,text%+24,600,690,miny,52,"
  1540. ",&17000121,0)
  1541. miny-=60
  1542. count%=1
  1543.  I=1 
  1544. $samps%=""
  1545. $volume%=""
  1546. $samplen%=""
  1547. create_icon(samples%,0,10,80,miny,36,
  1548. I,&7000021,0)
  1549. create_icon(samples%,samps%,90,490,miny,36,"",&7016121,32)
  1550. create_icon(samples%,volume%,500,590,miny,36,"",&7000121,32)
  1551. create_icon(samples%,samplen%,600,690,miny,36,"",&7000121,32)
  1552. _8miny-=36:samps%+=32:volume%+=4:samplen%+=6:count%+=1
  1553. samps%=start%
  1554. volume%=volstart%
  1555. samplen%=sampstart%
  1556. samples_draw
  1557. sampsnum=0
  1558. start%=samps%
  1559. volstart%=volume%
  1560. sampstart%=samplen%
  1561.  I=1 
  1562.  "Tracker_ReadSampleTable",I,,,,lock% 
  1563.  no%,a$,vol%,len%
  1564. puticontext(samples%,(2*I)+3,samps%,a$)
  1565.  vol%<>0 
  1566. puticontext(samples%,(2*I)+4,volume%,
  1567. vol%) 
  1568. puticontext(samples%,(2*I)+4,volume%,"")
  1569.  len%<>0 
  1570. puticontext(samples%,(2*I)+5,samplen%,
  1571. len%) 
  1572. puticontext(samples%,(2*I)+5,samplen%,""):sampsnum+=1
  1573. p%samps%+=32:volume%+=4:samplen%+=6
  1574. samps%=start%
  1575. volume%=volstart%
  1576. samplen%=sampstart%
  1577. puticontext(window%,icon%,buffer%,text$)
  1578. $buffer%=text$
  1579. y'pointer%!0=window%:pointer%!4=icon%
  1580. pointer%!8=0:pointer%!12=0
  1581.  "Wimp_SetIconState",,pointer%
  1582.  "Wimp_ProcessKey",q%!24
  1583.  q%!0 
  1584.  buffer%
  1585.  q%!4 
  1586.  q%!24 
  1587.  13 : q%!8=4:q%!12=buffer%:q%!16=5:
  1588. slabicon
  1589. 4             
  1590. buffer(
  1591. geticondata(buffer%,3)))
  1592.  waveform%
  1593.  q%!4 
  1594.  q%!24 
  1595.  13 : show%=
  1596.  "Wimp_ForceRedraw",wavepane%,0,-256,2112,0
  1597.  q%!24 
  1598.  385 : speaker=
  1599. speaker:
  1600. toggleopts(speaker,control%,12)
  1601. E            
  1602.  speaker 
  1603.  "Sound_Speaker",2 
  1604.  "Sound_Speaker",1
  1605.  386 : mute%=
  1606. mute%:
  1607. toggleopts(mute%,control%,15)
  1608. A            
  1609.  mute% 
  1610.  "Sound_Enable",1 
  1611.  "Sound_Enable",2
  1612.  387 : 
  1613.  register% 
  1614. 4              
  1615.  "Wimp_GetPointerInfo",,pointer%
  1616. K              
  1617.  "Wimp_CreateMenu",,saveas%,pointer%!0-64,pointer%!4+64
  1618.             
  1619.  388 : 
  1620. puticonsprite(control%,0,"rev1"):sicn%=0:nscn%=
  1621. D            
  1622.  "Tracker_ReadPos",,,,,lock% 
  1623.  c,,m:c-=1:
  1624.  c<0 c=m
  1625. !            
  1626.  c=0 donezero%=
  1627. .            
  1628.  "Tracker_SetPos",c,,,,lock%
  1629.  389 : 
  1630.  "Tracker_Pause",,,,,lock%
  1631. 3            
  1632. puticonsprite(control%,1,"pause1")
  1633. 1            
  1634. puticonsprite(control%,2,"stop")
  1635. 1            
  1636. puticonsprite(control%,3,"play")
  1637.  390 : 
  1638.  dos% 
  1639. -              
  1640.  "Tracker_Stop",,,,,lock%
  1641. 4              
  1642. puticonsprite(control%,1,"pause")
  1643. 4              
  1644. puticonsprite(control%,2,"stop1")
  1645. 3              
  1646. puticonsprite(control%,3,"play")
  1647. .              
  1648. puticondata(control%,9,"0")
  1649. /              
  1650. puticondata(control%,10,"0")
  1651. #              
  1652. clear:playing%=
  1653. .              cding%=
  1654. :cdpos%=-1:cdmax%=-1
  1655.             
  1656. .              
  1657.  "Tracker_Pause",,,,,lock%
  1658. 0              
  1659.  "Tracker_SetPos",0,,,,lock%
  1660. 4              
  1661. puticonsprite(control%,1,"pause")
  1662. 4              
  1663. puticonsprite(control%,2,"stop1")
  1664. 3              
  1665. puticonsprite(control%,3,"play")
  1666.               donezero%=
  1667.             
  1668.  391 : 
  1669.  "Tracker_Play",,,,,lock%
  1670. 2            
  1671. puticonsprite(control%,1,"pause")
  1672. 1            
  1673. puticonsprite(control%,2,"stop")
  1674. 2            
  1675. puticonsprite(control%,3,"play1")
  1676.  392 : 
  1677. puticonsprite(control%,4,"fwd1"):sicn%=4:nscn%=
  1678. D            
  1679.  "Tracker_ReadPos",,,,,lock% 
  1680.  c,,m:c+=1:
  1681.  c>m c=0
  1682. .            
  1683.  "Tracker_SetPos",c,,,,lock%
  1684.  401 : 
  1685.  registered% 
  1686. 3              copen%=
  1687. copen%:
  1688. tickmenu(open%,0)
  1689. ;              
  1690.  copen% 
  1691. openup(control%,0,1024,625,360)
  1692. ,              
  1693.  copen% 
  1694. shut(control%)
  1695.             
  1696.  402 : 
  1697.  registered% 
  1698. 3              topen%=
  1699. topen%:
  1700. tickmenu(open%,1)
  1701. =              
  1702.  topen% 
  1703. openup(tuneinfo%,580,530,700,430)
  1704. -              
  1705.  topen% 
  1706. shut(tuneinfo%)
  1707.             
  1708.  403 : 
  1709.  registered% 
  1710. 3              sopen%=
  1711. sopen%:
  1712. tickmenu(open%,2)
  1713. ;              
  1714.  sopen% 
  1715. window_centre(stereo%,1110,250)
  1716. +              
  1717.  sopen% 
  1718. shut(stereo%)
  1719.             
  1720.  404 : 
  1721.  registered% 
  1722. 3              vopen%=
  1723. vopen%:
  1724. tickmenu(open%,3)
  1725. =              
  1726.  vopen% 
  1727. openback(samples%,0,1000,700,850)
  1728. ,              
  1729.  vopen% 
  1730. shut(samples%)
  1731.             
  1732.  405 : 
  1733.  registered% 
  1734. 3              bopen%=
  1735. bopen%:
  1736. tickmenu(open%,4)
  1737. :              
  1738.  bopen% 
  1739. window_centre(buffer%,700,475)
  1740. +              
  1741.  bopen% 
  1742. shut(buffer%)
  1743.             
  1744.  406 : 
  1745.  registered% 
  1746. 3              oopen%=
  1747. oopen%:
  1748. tickmenu(open%,5)
  1749. ;              
  1750.  oopen% 
  1751. window_centre(options%,768,367)
  1752. ,              
  1753.  oopen% 
  1754. shut(options%)
  1755.             
  1756.  407 : 
  1757.  registered% 
  1758. 5              vuopen%=
  1759. vuopen%:
  1760. tickmenu(open%,6)
  1761. =              
  1762.  vuopen% 
  1763. openup(vumeter%,970,900,310,280)
  1764. -              
  1765.  vuopen% 
  1766. shut(vumeter%)
  1767.             
  1768.  408 : 
  1769.  registered% 
  1770. 3              wopen%=
  1771. wopen%:
  1772. tickmenu(open%,7)
  1773. M              
  1774.  wopen% 
  1775. openlinked(waveform%,wavepane%,1280,390,2112,256)
  1776. >              
  1777.  wopen% 
  1778. shut(waveform%):
  1779. shut(wavepane%)
  1780.             
  1781.  409 : 
  1782.  registered% 
  1783. 5              cropen%=
  1784. cropen%:
  1785. tickmenu(open%,8)
  1786. 9              
  1787.  cropen% 
  1788. openup(cro%,700,500,150,200)
  1789. )              
  1790.  cropen% 
  1791. shut(cro%)
  1792.             
  1793.  474 : 
  1794.  registered% 
  1795.               
  1796. monitor
  1797.             
  1798.  393 : cvol%-=5:
  1799.  cvol%<0 cvol%=0
  1800. &            x%=
  1801. int(cvol%/volunit)
  1802. 1            pointer%!0=control%:pointer%!4=18
  1803. 0            
  1804.  "Wimp_GetIconState",,pointer%
  1805. .            
  1806.  "Wimp_DeleteIcon",,pointer%
  1807. )            pointer%!16=pointer%!8+x%
  1808. D            pointer%!4=control%:
  1809.  "Wimp_CreateIcon",,pointer%+4
  1810. >            pointer%!4=19:
  1811.  "Wimp_GetIconState",,pointer%
  1812. _            
  1813.  "Wimp_ForceRedraw",pointer%!0,pointer%!8,pointer%!12,pointer%!16,pointer%!20
  1814.  458 : cvol%+=5:
  1815.  cvol%>255 cvol%=255
  1816. &            x%=
  1817. int(cvol%/volunit)
  1818. 1            pointer%!0=control%:pointer%!4=18
  1819. 0            
  1820.  "Wimp_GetIconState",,pointer%
  1821. .            
  1822.  "Wimp_DeleteIcon",,pointer%
  1823. )            pointer%!16=pointer%!8+x%
  1824. D            pointer%!4=control%:
  1825.  "Wimp_CreateIcon",,pointer%+4
  1826. >            pointer%!4=19:
  1827.  "Wimp_GetIconState",,pointer%
  1828. _            
  1829.  "Wimp_ForceRedraw",pointer%!0,pointer%!8,pointer%!12,pointer%!16,pointer%!20
  1830.  459 : cvol%=255
  1831. &            x%=
  1832. int(cvol%/volunit)
  1833. 1            pointer%!0=control%:pointer%!4=18
  1834. 0            
  1835.  "Wimp_GetIconState",,pointer%
  1836. .            
  1837.  "Wimp_DeleteIcon",,pointer%
  1838. )            pointer%!16=pointer%!8+x%
  1839. D            pointer%!4=control%:
  1840.  "Wimp_CreateIcon",,pointer%+4
  1841. >            pointer%!4=19:
  1842.  "Wimp_GetIconState",,pointer%
  1843. _            
  1844.  "Wimp_ForceRedraw",pointer%!0,pointer%!8,pointer%!12,pointer%!16,pointer%!20
  1845. .            
  1846.  "Tracker_SetPos",0,,,,lock%
  1847. +            
  1848.  "Tracker_Play",,,,,lock%
  1849. 2            
  1850. puticonsprite(control%,1,"pause")
  1851. 1            
  1852. puticonsprite(control%,2,"stop")
  1853.     2            
  1854. puticonsprite(control%,3,"play1")
  1855. 8            
  1856.  "Sound_Speaker",1:
  1857.  "Sound_Enable",2
  1858. !            speaker=
  1859. :mute%=
  1860. 4            
  1861. puticonsprite(control%,12,"seloff")
  1862. 4            
  1863. puticonsprite(control%,15,"seloff")
  1864.  474 : 
  1865.  registered% 
  1866. +              pointer%!0=1:pointer%!4=9
  1867. 9              
  1868.  "Wimp_SendMessage",9,pointer%,taskh%
  1869.             
  1870. buffer(size%)
  1871.  playing% 
  1872. tellemoff("Can't alter buffer while playing"):
  1873.  buff%>0 
  1874. release_rma(buff%)
  1875. ("RMAFree "+
  1876. (size%)+" Error 0 Insufficent RMA")
  1877. "buffersize%=(size%*1024) 
  1878. !buff%=
  1879. claim_rma(buffersize%)
  1880.  "OS_Heap",0,buff%,,buffersize%
  1881. redo_buff(lenbytes%)
  1882. hold_it(window%)
  1883.  finish%
  1884.  window% 
  1885.  odd% : 
  1886. window_centre(odd%,750,300)
  1887.  help%: 
  1888. window_centre(help%,800,400)
  1889. %;pointer%!0=window%:
  1890.  "Wimp_GetWindowOutline",,pointer%
  1891. &Cxmin%=pointer%!4:ymin%=pointer%!8:xsize%=pointer%!12-pointer%!4
  1892. 'Aysize%=pointer%!16-pointer%!8:
  1893.  xmin%,ymin%,xsize%,ysize%
  1894. finish%=
  1895.  "Wimp_Poll",,pointer% 
  1896.  1 : 
  1897. redraw2
  1898.  2 : 
  1899.  "Wimp_OpenWindow",,pointer%
  1900.  3 : 
  1901.  "Wimp_CloseWindow",,pointer%
  1902.  6 : 
  1903. checkmouse2
  1904.  17,18 : 
  1905.  pointer%!16=0 
  1906.  "Interface_CloseDown",taskh%:
  1907.  "Sound_Speaker",oldspeak%:
  1908.  "Sound_Enable",oldmute%:
  1909.  "Tracker_Unlock",lock%:
  1910. tidy:
  1911.  "Wimp_CloseDown":
  1912. 1E             
  1913.  pointer%!16=&400C1 
  1914.  xmin%,ymin%,xsize%,ysize%
  1915.  finish%
  1916. shut(window%)
  1917.  "OS_ReadModeVariable",-1,4 
  1918.  ,,Eig%
  1919.  "OS_ReadModeVariable",-1,11 
  1920.  ,,Extent%
  1921. xsize%=(Extent%+1)<<Eig%
  1922.  "OS_ReadModeVariable",-1,5 
  1923.  ,,Eig%
  1924.  "OS_ReadModeVariable",-1,12 
  1925.  ,,Extent%
  1926. ysize%=(Extent%+1)<<Eig%
  1927.  0,0,xsize%,ysize%
  1928. checkmouse2
  1929.  pointer%!12 
  1930.  odd%
  1931.  pointer%!8 
  1932.  4 : 
  1933.  pointer%!16 
  1934.  6 : 
  1935. slabicon2:
  1936. tracker_loadit(f$):finish%=
  1937.  7 : 
  1938. slabicon2:finish%=
  1939.  8 : 
  1940. slabicon2:
  1941. setup_help:
  1942. hold_it(help%):finish%=
  1943.  help%
  1944.  pointer%!8 
  1945.  4 : 
  1946.  pointer%!16 
  1947.  9 : 
  1948. slabicon2:finish%=
  1949. setup_help
  1950. clear_help
  1951. puticondata(help%,3,"PlayTrack can only handle")
  1952. puticondata(help%,4,"certain types of file.")
  1953. puticondata(help%,5,"However, it may be able to")
  1954. puticondata(help%,6,"load music files in formats")
  1955. puticondata(help%,7,"it doesn't 'know' about,")
  1956. puticondata(help%,8,"so you can still hear them.")
  1957. setup_mess1
  1958. clear_help
  1959. puticondata(help%,3,"This is an unregistered")
  1960. puticondata(help%,4,"copy of !PlayTrack, that is")
  1961. puticondata(help%,5,"restricted in what it can do.")
  1962. puticondata(help%,6,"If you want to use the more")
  1963. puticondata(help%,7,"advanced facilities, then")
  1964. puticondata(help%,8,"you can register.")
  1965. setup_mess2
  1966. clear_help
  1967. puticondata(help%,3,"This copy of !PlayTrack is")
  1968. puticondata(help%,4,"now registered to this")
  1969. puticondata(help%,5,"machine.  Please quit")
  1970. puticondata(help%,6,"!PlayTrack and reload to")
  1971. puticondata(help%,7,"use the more advanced")
  1972. puticondata(help%,8,"facilities.")
  1973. setup_mess3
  1974. clear_help
  1975. puticondata(help%,3,"Only PIN numbers up to")
  1976. puticondata(help%,4,"#65280 are allowed.")
  1977. puticondata(help%,6,"Please re-enter your")
  1978. puticondata(help%,7,"PIN number.")
  1979. setup_mess4
  1980. clear_help
  1981. puticondata(help%,3,"This copy of !PlayTrack is")
  1982. puticondata(help%,4,"not registered to this")
  1983. puticondata(help%,5,"machine.")
  1984. puticondata(help%,7,"!PlayTrack will now run, but")
  1985. puticondata(help%,8,"will not work fully.")
  1986. clear_help:
  1987.  I%=3 
  1988. puticondata(help%,I%,""):
  1989. redraw2
  1990.  "Wimp_RedrawWindow",,pointer% 
  1991.  more%
  1992.  more%<>0
  1993.  "Interface_Render3dWindow",,pointer%
  1994.  "Wimp_GetRectangle",,pointer% 
  1995.  more%
  1996. slabicon2
  1997.  "Interface_SlabButton",,pointer%
  1998. pointer%!8=0
  1999.  "Interface_SlabButton",,pointer%
  2000. register(string$)
  2001. puticondata(infowind%,15,"Registered to: "+string$)
  2002. get_register
  2003. ("<PlayTrack$Dir>.Register")
  2004. block%=
  2005. claim_rma(l%)
  2006.  "OS_File",255,"<PlayTrack$Dir>.Register",block%
  2007.  I%=0 
  2008.  l%:block%?I%=block%?I% 
  2009. (I%),1)):
  2010. 0pirate%=
  2011. :pin%=!block%:name$=
  2012. rtoz(block%+4)
  2013.  pin%=65281 
  2014.  pin%=65282 
  2015.  pin%=65281 
  2016. ,    
  2017. register(name$):registered%=
  2018. &    
  2019. register(name$):registered%=
  2020.  "OS_Byte",161,cmos% 
  2021.  ,,reg%:
  2022.  "OS_Byte",161,cmos2% 
  2023.  ,,reg2%
  2024.   reg%=(256*reg%)+reg2%
  2025.  reg%<>pin% 
  2026. setup_mess4:
  2027. hold_it(help%):registered%=
  2028. :pirate%=
  2029. register("PIRATE COPY"):
  2030. release_rma(block%):
  2031. register(name$):registered%=
  2032. release_rma(block%)
  2033.  I=1 
  2034. claim_rma(size%)
  2035.  "XOS_Module",6,,,size% 
  2036.  ,,addr%;flags%
  2037.  (flags% 
  2038.  1)=1 
  2039. tellemoff("Error during RMA claim")
  2040. =addr%
  2041. release_rma(addr%)
  2042.  "OS_Module",7,,addr%
  2043. register_copy
  2044. #name$=
  2045. geticondata(register%,4)
  2046. &pin%=
  2047. geticondata(register%,10))
  2048.  pin%>65280 
  2049. setup_mess3:
  2050. hold_it(help%):
  2051. puticondata(register%,10,""):
  2052. len%=4+
  2053. name$+1
  2054. addr%=
  2055. claim_rma(len%)
  2056. \!addr%=pin%:block%=addr%+4:name$+=
  2057.  I%=1 
  2058. name$:?block%=
  2059. name$,I%,1)):block%+=1:
  2060.  I%=0 
  2061.  len%:addr%?I%=addr%?I% 
  2062. I%,1)):
  2063.  "OS_File",10,"<PlayTrack$Dir>.Register",&FFD,,addr%,addr%+len%
  2064.  "OS_Byte",162,cmos%,pin% 
  2065.  "OS_Byte",162,cmos2%,pin% 
  2066. setup_mess2:
  2067. hold_it(help%)
  2068. save_opts
  2069. ("<PlayTrack$Dir>.Options")
  2070. $clock$=
  2071. geticondata(options%,13)
  2072. #buffer$=
  2073. geticondata(buffer%,3)
  2074. #h%,lap%,scr%,dos%,afs%,mak%,clock$,buffer$
  2075. load_opts
  2076. ("<PlayTrack$Dir>.Options")
  2077. #h%,lap%,scr%,dos%,afs%,mak%,clock$,buffer$
  2078. /lap$="":
  2079.  lap% lap$="selon" 
  2080.  lap$="seloff"
  2081. /scr$="":
  2082.  scr% scr$="selon" 
  2083.  scr$="seloff"
  2084. /dos$="":
  2085.  dos% dos$="selon" 
  2086.  dos$="seloff"
  2087. /afs$="":
  2088.  afs% afs$="selon" 
  2089.  afs$="seloff"
  2090. /mak$="":
  2091.  mak% mak$="selon" 
  2092.  mak$="seloff"
  2093. puticonsprite(options%,2,lap$)
  2094. puticonsprite(options%,4,scr$)
  2095. puticonsprite(options%,6,dos$)
  2096. puticonsprite(options%,8,afs$)
  2097. puticonsprite(options%,11,mak$)
  2098. puticondata(options%,13,clock$)
  2099. puticondata(buffer%,3,buffer$)
  2100. openlinked(wh1%,wh2%,w1%,h1%,w2%,h2%)
  2101. x%=(1280-w1%)/2
  2102. y%=((1024-h1%)/2)+h1%
  2103. openup(wh1%,x%,y%,w1%,h1%)
  2104. openup(wh2%,x%+20,y%-80,w1%-40,h2%)
  2105. volume
  2106.  "Wimp_GetPointerInfo",,pointer%:x%=pointer%!0
  2107. :pointer%!0=control%:
  2108.  "Wimp_GetWindowState",,pointer%
  2109. Ax%-=pointer%!4:pointer%!4=19:
  2110.  "Wimp_GetIconState",,pointer%
  2111. 6x%-=pointer%!8:
  2112.  x% now is distance along icon #19
  2113. x1=x%/580:
  2114.  x1>1 x1=1
  2115.  x1<0 x1=0
  2116.  x1<>pc 
  2117. '  pointer%!0=control%:pointer%!4=18
  2118.  "Wimp_GetIconState",,pointer%
  2119.  "Wimp_DeleteIcon",,pointer%
  2120. 9  pointer%!4=control%:pointer%!16=pointer%!8+(x1*580)
  2121.  "Wimp_CreateIcon",,pointer%+4
  2122. H  pointer%!0=control%:pointer%!4=19:
  2123.  "Wimp_GetIconState",,pointer%
  2124.  "Wimp_ForceRedraw",pointer%!0,pointer%!8,pointer%!12,pointer%!16,pointer%!20
  2125. pc=x%/580:
  2126.  pc>1 pc=1
  2127.  pc<0 pc=0
  2128.  "Tracker_Volume",pc*127,,,,lock%
  2129. int(int)
  2130. int+=0.5
  2131. (int)
  2132. playnote
  2133. 2samp%=
  2134. geticondata(waveform%,1)):
  2135.  samp%=0 
  2136.  "Tracker_ReadSampleTable",samp%,,,,lock% 
  2137.  ,,len%:
  2138.  len%=0 
  2139.  "Tracker_PlayNote",1,15,samp%,200,lock%
  2140. save_rm(f$)
  2141.  workspc%=0 
  2142. tellemoff("You have to have a Tracker tune loaded first!"):
  2143. $base%=
  2144. claim_rma(lenbytes%+1000)
  2145.  base%=0 
  2146. tellemoff("Cannot save Tracker tune as Relocatable Module"):
  2147.  pass%=12 
  2148. )P%=0:O%=base%:L%=base%+lenbytes%+1500
  2149. [OPT pass%
  2150. EQUD 0
  2151. EQUD mod_initialise%
  2152. EQUD mod_finalise%
  2153. EQUD 0
  2154. EQUD mod_title%
  2155. EQUD mod_help%
  2156.  com% 
  2157.   [OPT pass%
  2158.   EQUD mod_command%
  2159.   [OPT pass%
  2160.   EQUD 0
  2161. [OPT pass%
  2162. EQUD 0
  2163. .mod_initialise%
  2164. STMFD R13!,{R0-R8,R14}
  2165. SWI "OS_ReadMonotonicTime"
  2166.  R0,R0,#256
  2167. STR R0,mod_lock%
  2168. SWI "Tracker_Lock"
  2169. ADR R0,mod_tunestart%
  2170. LDR R1,mod_tunelength%
  2171. LDR R4,mod_lock%
  2172. SWI "Tracker_MemoryLoad"
  2173. LDR R0,mod_autoplay%
  2174. CMP R0,#1
  2175. SWIEQ "Tracker_Play"
  2176. LDMFD R13!,{R0-R8,PC}
  2177. .mod_finalise%
  2178. STMFD R13!,{R0-R8,R14}
  2179. LDR R4,mod_lock%
  2180. SWI "Tracker_Stop"
  2181. MOV R0,R4
  2182. SWI "Tracker_Unlock"
  2183. LDMFD R13!,{R0-R8,PC}
  2184. .mod_title%
  2185. EQUS "MusicModule"
  2186. EQUB 0
  2187. :    ALIGN
  2188. .mod_help%
  2189. =0EQUS "MusicModule"+
  2190. 9+"0.10 ("+
  2191. $,5,11)+")"
  2192. EQUB 0:ALIGN
  2193. .mod_command%
  2194. EQUS "MusicOn"
  2195. EQUB 0
  2196. C    ALIGN
  2197. EQUD mod_musicon%
  2198. EQUD 0
  2199. EQUD mod_musicon_syntax%
  2200. EQUD mod_musicon_help%
  2201. EQUS "MusicOff"
  2202. EQUB 0
  2203. J    ALIGN
  2204. EQUD mod_musicoff%
  2205. EQUD 0
  2206. EQUD mod_musicoff_syntax%
  2207. EQUD mod_musicoff_help%
  2208. EQUS "MusicPause"
  2209. EQUB 0
  2210. Q    ALIGN
  2211. EQUD mod_musicpause%
  2212. EQUD 0
  2213. EQUD mod_musicpause_syntax%
  2214. EQUD mod_musicpause_help%
  2215. EQUD 0
  2216. .mod_musicon%
  2217. STMFD R13!,{R0-R8,R14}
  2218. LDR R4,mod_lock%
  2219. SWI "Tracker_Play"
  2220. LDMFD R13!,{R0-R8,PC}
  2221. .mod_musicon_syntax%
  2222. EQUS "Syntax: *MusicOn"
  2223. EQUB 0
  2224. a    ALIGN
  2225. .mod_musicon_help%
  2226. d=EQUS "*MusicOn switches the background Tracker music on."
  2227. EQUB 0
  2228. f    ALIGN
  2229. .mod_musicoff%
  2230. STMFD R13!,{R0-R8,R14}
  2231. LDR R4,mod_lock%
  2232. SWI "Tracker_Pause"
  2233. MOV R0,#0
  2234. SWI "Tracker_SetPos"
  2235. LDMFD R13!,{R0-R8,PC}
  2236. .mod_musicoff_syntax%
  2237. EQUS "Syntax: *MusicOff"
  2238. EQUB 0
  2239. s    ALIGN
  2240. .mod_musicoff_help%
  2241. v?EQUS "*MusicOff switches the background Tracker music off."
  2242. EQUB 0
  2243. x    ALIGN
  2244. .mod_musicpause%
  2245. STMFD R13!,{R0-R8,R14}
  2246. LDR R4,mod_lock%
  2247. SWI "Tracker_Pause"
  2248. LDMFD R13!,{R0-R8,PC}
  2249. .mod_musicpause_syntax%
  2250. EQUS "Syntax: *MusicPause"
  2251. EQUB 0
  2252.     ALIGN
  2253. .mod_musicpause_help%
  2254. ;EQUS "*MusicPause pauses the background Tracker music."
  2255. EQUB 0
  2256.     ALIGN
  2257. .mod_autoplay%
  2258. EQUD 1
  2259. .mod_lock%
  2260. EQUD 0
  2261. .mod_tunelength%
  2262. EQUD 0
  2263. .mod_tunestart%
  2264.  "OS_File",&FF,tune$,mod_tunestart%+base%
  2265. P%+=lenbytes%:O%+=lenbytes%
  2266.  pass%
  2267. &!(mod_tunelength%+base%)=lenbytes%
  2268.  ap% 
  2269.  !(mod_autoplay%+base%)=1 
  2270.  !(mod_autoplay%+base%)=0
  2271.  "OS_File",&A,f$,&FFA,,base%,base%+P%
  2272. release_rma(base%)
  2273. monitor:oldmode%=
  2274.  track%
  2275.  workspc%=0 
  2276. tellemoff("You must have a tune loaded first!"):
  2277.  I%=0 
  2278.  fontlen%-1:
  2279.  font%?I%:
  2280.  "Tracker_TuneInfo",,,,,lock% 
  2281.  len%,voices%,speed%,name$,a%
  2282. 0,0);"Track: "+name$
  2283. 48,1);"Voices: "+
  2284. voices%+"     Speed: "+
  2285. speed%
  2286. 48,2);"Patterns: "+
  2287. len%+
  2288. len%)," ")+" Volume: "+
  2289. ~cvol%
  2290. 48,3);"Position: 0   of: "+
  2291. (len%-1)+
  2292. (len%-1))," ")+" Event: 0"
  2293. 12,5);"Pitch Acc Pitch Inc Byte Off  Samp Len  Samp No   Volume    Period"
  2294.  "OS_Heap",1,buff% 
  2295.  ,,,size%
  2296. 0,20);"Buffer size currently &"+
  2297. ~size%+" bytes."
  2298. 0,21);"Module loaded at &"+
  2299. ~workspc%+", length &"+
  2300. ~lenbytes%
  2301. 0,29);"System PlayTrack by David J. Seery"
  2302. 0,31);
  2303. geticondata(infowind%,15);
  2304.  "Tracker_ReadPos" 
  2305.  cp%,ev%
  2306. 48,3);"Position: "+
  2307. cp%)," ")+" of: "+
  2308. (len%-1)+
  2309. (len%-1))," ")+" Event: "+
  2310.  "Tracker_SoundInfo",pointer%
  2311.  I%=0 
  2312.  224 
  2313.  32:track%=I%/32
  2314. 0,6+track%);"Channel "+
  2315. track%
  2316. acc%=pointer%!I%:inc%=pointer%!(I%+4):slen%=pointer%!(I%+12):sno%=pointer%!(I%+16):vol%=pointer%!(I%+20):note%=pointer%!(I%+24):per%=pointer%!(I%+28)
  2317. "OS_ConvertHex8",acc%,pointer%+300,100:acc$=
  2318. rtoz(pointer%+300)
  2319. "OS_ConvertHex8",inc%,pointer%+300,100:inc$=
  2320. rtoz(pointer%+300)
  2321. "OS_ConvertHex8",acc%>>>16,pointer%+300,100:loop$=
  2322. rtoz(pointer%+300)
  2323. "OS_ConvertHex8",slen%,pointer%+300,100:slen$=
  2324. rtoz(pointer%+300)
  2325. "OS_ConvertHex8",sno%,pointer%+300,100:sno$=
  2326. rtoz(pointer%+300)
  2327. "OS_ConvertHex8",255-vol%,pointer%+300,100:vol$=
  2328. rtoz(pointer%+300)
  2329. "OS_ConvertHex8",per%,pointer%+300,100:per$=
  2330. rtoz(pointer%+300)
  2331. 12,6+track%);acc$+"  "+inc$+"  "+loop$+"  "+slen$+"  "+sno$+"  "+vol$+"  "+per$
  2332. (10*track%)+3,15);
  2333. note(note%)
  2334.  x%,y%,z%:
  2335.  z%<>0
  2336. ("Alphabet Latin1")
  2337.  "Wimp_SetMode",oldmode%
  2338. note(val%)
  2339.  val% 
  2340.  1 : ="C-1"
  2341.  2 : ="C#1"
  2342.  3 : ="D-1"
  2343.  4 : ="D#1"
  2344.  5 : ="E-1"
  2345.  6 : ="F-1"
  2346.  7 : ="F#1"
  2347.  8 : ="G-1"
  2348.  9 : ="G#1"
  2349.  10: ="A-1"
  2350.  11: ="A#1"
  2351.  12: ="B-1"
  2352.  13: ="B#1"
  2353.  14: ="C-2"
  2354.  15: ="C#2"
  2355.  16: ="D-2"
  2356.  17: ="D#2"
  2357.  18: ="E-2"
  2358.  19: ="F-2"
  2359.  20: ="F#2"
  2360.  21: ="G-2"
  2361.  22: ="G#2"
  2362.  23: ="A-2"
  2363.  24: ="A#2"
  2364.  25: ="B-2"
  2365.  26: ="B#2"
  2366.  27: ="C-3"
  2367.  28: ="C#3"
  2368.  29: ="D-3"
  2369.  30: ="D#3"
  2370.  31: ="E-3"
  2371.  32: ="F-3"
  2372.  33: ="F#3"
  2373.  34: ="G-3"
  2374.  35: ="G#3"
  2375.  36: ="A-3"
  2376. ="0-0"
  2377.  buff%>0 
  2378. release_rma(buff%)
  2379. loadcd(f$)
  2380.  ptr%
  2381. cdir$=f$+".CD"
  2382. ptr%=0
  2383. gettracks(cdir$)
  2384. #cdpos%=0:cding%=
  2385. :cdmax%=ptr%-1
  2386. tracker_loadit(cdir$+"."+cd$(cdpos%))
  2387. donezero%=
  2388. :rand%=
  2389. gettracks(dir$)
  2390.  next%,num%
  2391. next%=0
  2392.  next%<>-1
  2393.  "OS_GBPB",10,dir$,pointer%,1,next%,400,"*" 
  2394.  ,,,num%,next%
  2395.  num%>0 
  2396.  pointer%?&10=1 
  2397. /      cd$(ptr%)=
  2398. rtoz(pointer%+&14):ptr%+=1
  2399.         
  2400. nextcd
  2401. &cdpos%+=1:
  2402.  cdpos%>cdmax% cdpos%=0
  2403. tracker_loadit(cdir$+"."+cd$(cdpos%))
  2404. donezero%=
  2405. swi(swi$)
  2406.  "XOS_SWINumberFromString",,swi$ 
  2407.  num%;flags%
  2408.  (flags% 
  2409.  1)=1 
  2410.  num%=-1
  2411.     =num%
  2412. mutechan(chan%)
  2413. ch%(chan%)=
  2414. ch%(chan%)
  2415.  ch%(chan%) 
  2416. puticonsprite(control%,20+chan%,"opton")
  2417.  "Tracker_RestoreChannel",chan%+1,,,,lock%
  2418. puticonsprite(control%,20+chan%,"optoff")
  2419.  "Tracker_MuteChannel",chan%+1,,,,lock%
  2420. loadpl(f$)
  2421. cdmax%=0:cdpos%=-1
  2422. cd$(cdmax%)=
  2423. cdmax%+=1
  2424. cdmax%-=1:
  2425. #j%:rand%=
  2426. %%cding%=
  2427. :donezero%=
  2428. :oldcdpos%=-1
  2429. next_pl
  2430. next_pl
  2431. cdpos%=
  2432. (cdmax%+1)-1
  2433.  cdpos%=oldcdpos%:cdpos%=
  2434. (cdmax%+1)-1:
  2435. :oldcdpos%=cdpos%
  2436. tracker_loadit(cd$(cdpos%))
  2437. donezero%=
  2438.